package top.jiangqiang.qyblog.core.service;

import org.jetbrains.annotations.NotNull;
import top.jiangqiang.qyblog.common.base.query.PageResult;
import top.jiangqiang.qyblog.common.base.response.Result;
import top.jiangqiang.qyblog.core.base.service.BaseService;
import top.jiangqiang.qyblog.core.constant.StorageTypeEnum;
import top.jiangqiang.qyblog.core.domain.dto.StorageAddDto;
import top.jiangqiang.qyblog.core.domain.dto.StorageQueryDto;
import top.jiangqiang.qyblog.core.domain.dto.StorageUpdateDto;
import top.jiangqiang.qyblog.core.domain.entity.Storage;
import top.jiangqiang.qyblog.core.domain.vo.StorageVo;

/**
 * <p>
 * 存储器 服务类
 * </p>
 *
 * @author JiangQiang
 * @since 2023-05-22
 */
public interface IStorageService extends BaseService<Storage> {

    /**
     * 获取系统支持的所有存储器类型列表
     *
     * @return
     */
    Result<StorageTypeEnum[]> getTypes();

    /**
     * 新增存储器
     * 后面新增存储器则不会再激活
     *
     * @param storageAddDto
     * @return
     */
    Result<String> addStorage(StorageAddDto storageAddDto);

    /**
     * 编辑存储器配置，不会影响激活状态
     * UPDATE qy_storage SET name=?, type=?, config=?, update_user=?, update_time=? WHERE id=?
     *
     * @param storageUpdateDto
     * @return
     */
    Result<String> editStorage(StorageUpdateDto storageUpdateDto);

    /**
     * 激活指定id的存储器
     *
     * @param id
     * @return
     */
    Result<String> activeStorage(Long id);

    /**
     * 获取激活的存储器，只会存在一个激活的存储器，也就是默认存储器
     *
     * @return
     */
    Storage getActiveStorage();

    Result<Boolean> deleteStorage(Long id);

    /**
     * 获取一个存储器，如果id为空，则获取一个默认存储器
     *
     * @param storageId
     * @return
     */
    @NotNull
    Storage getStorage(Long storageId);

    Result<StorageVo> getStorageDetail(Long id);

    PageResult<StorageVo> findByCondition(StorageQueryDto query);
}
